
package cn.hsa.fqz.task.service;

import cn.hsa.fqz.task.controller.vo.TaskRoleAuthVO;
import cn.hsa.fqz.task.enums.UserCategoryEnums;
import cn.hsa.fqz.task.service.dto.*;
import cn.hsa.hsaf.core.framework.util.PageResult;
import cn.hsa.hsaf.core.framework.web.WrapperResponse;

import cn.hsa.fqz.task.entity.TTask;
import cn.hsa.fqz.task.entity.TTaskProcess;

import java.util.List;


/**
 *
 */
public interface TTaskService   {

    /**
     * 线索任务发布
     * @param csId
     * @return
     */
    WrapperResponse<Boolean> addTask(LoginUserDTO user, Integer csId);

    /**
     *  发布子任务
     * @param user
     * @return
     */
    WrapperResponse<Boolean> addSubTask(LoginUserDTO user, Integer taskId, String... orgId);


    /**
     * 分页查询
     * @param query
     * @return
     */
    WrapperResponse<PageResult<TTask>> getPageByCondition(TaskQueryDTO query);

    WrapperResponse<List<TTask>> enableList(UserCategoryEnums enums,String region);

    TTask findById(Integer taskId);

    List<TTask> getRootTaskByBelongTo(String region);

    /**
     * 任务分发
     * @param loginUser
     * @param taskId
     * @return
     */
    WrapperResponse<Boolean> addDistribute(LoginUserDTO loginUser, Integer taskId, String region);

    /**
     * 任务办结
     * @param loginUser
     * @param taskId
     * @return
     */
    WrapperResponse<Boolean> addFinish(LoginUserDTO loginUser, Integer taskId);

    /**
     * 子任务办结申请
     * @param loginUser
     * @param taskId
     * @return
     */
    WrapperResponse<Boolean> addSupplierFinish(LoginUserDTO loginUser, Integer taskId);

    /**
     * 任务取回
     * @param loginUser
     * @param taskId
     * @return
     */
    WrapperResponse<Boolean> addBack(LoginUserDTO loginUser, Integer taskId);

    /**
     * 任务移交
     * @param loginUser
     * @param id
     * @return
     */
    WrapperResponse<Integer> addSendTo(LoginUserDTO loginUser,Integer id);
    /**
     * 任务签收
     * @param loginUser
     * @param taskId
     * @return
     */
    WrapperResponse<Boolean> addReceive(LoginUserDTO loginUser, Integer taskId,Integer needSplit);

    /**
     * 任务查看详情
     * @param taskId
     * @return
     */
    WrapperResponse<TaskDetailDTO> getTaskDetail(Integer taskId);

    /**
     * 任务分发流程查看
     * @return
     */
    WrapperResponse<PageResult<TTaskProcess>> getFlowPageByCondition(TaskFlowQueryDTO query);

    /**
     * 执行任务
     * @param loginUser
     * @param dto
     * @return
     */
    WrapperResponse<Boolean> execute(LoginUserDTO loginUser, TaskExecDTO dto);

    /**
     * 执行任务回调
     * @param loginUser
     * @param taskId
     * @return
     */
    WrapperResponse<Boolean> executeCallback(LoginUserDTO loginUser, Integer taskId);

    /**
     * 任务签收列表
     * @param query
     * @return
     */
    WrapperResponse<PageResult<TTask>> getPageSubTaskByCondition(TaskQueryDTO query);

    /**
     * 查询任务可分发行政区划
     * @param taskId
     * @return
     */
    WrapperResponse<List<RegionDTO>> getEnableProvinceList(String host,Integer port,String passwd,String userAscm, Integer taskId);

    /**
     * 任务栈
     * @param query
     * @return
     */
    WrapperResponse<PageResult<TTask>> getPageStackTaskByCondition(TaskQueryDTO query);

    /**
     *
     * @param vo
     * @return
     */
    WrapperResponse<Integer> updateAuthTaskRole(TaskRoleAuthVO vo);

    WrapperResponse<Boolean> addDistributeAll(LoginUserDTO loginUser, Integer pTaskId);

    WrapperResponse<Boolean> addRollback(LoginUserDTO loginUser, Integer taskId);

    WrapperResponse<Boolean> addSupplier(Integer taskId, Integer supplierStatus);
}
